
//功能：实现config.h中的函数GetItemCfgCount  GetItemCfgByIndex  GetItemCfgByName

#include <config.h>
#include <stdio.h>
#include <string.h>

static ItemCfg g_tItemCfgs[ITEMCFG_MAX_NUM]; //用这个数组来保存配置文件中的每一项
static int g_iItemCfgCount = 0; //用来记录循环了多少次，共有多少项的配置文件

//1、解析配置文件，解析出来的每一项都会生成一个config.h中的struct ItemCfg，存放信息
int ParseConfigFile(char *strFileName)
{
	FILE *fp; //文件指针
	char buf[100]; 
	char *p = buf;
	
	/* 1. open config file */
	fp = fopen(CFG_FILE, "r"); //只读
	if (!fp)
	{
		printf("can not open cfg file %s\n", CFG_FILE);
		return -1;
	}
	//上面读进一行用fgets函数放到buf[]中
	while (fgets(buf, 100, fp))
	{
		/* 2.1 read each line */
		buf[99] = '\0';//最大，加结束符，100后面的忽略		

		/* 2.2 吃掉行开头的空格或TAB（\t） */
		p = buf;
		while (*p == ' ' || *p =='\t')
			p++;

		/* 2.3 忽略注释 */
		if (*p == '#')
			continue;

		/* 2.4 处理 */
		g_tItemCfgs[g_iItemCfgCount].command[0] = '\0';  //若配置文件中没有指令，根据这条给它设置一个，不为空。
		g_tItemCfgs[g_iItemCfgCount].index = g_iItemCfgCount;
		//sscanf从P字符串中取出某些数据存到参数%s %d %s里，打印出来
		sscanf(p, "%s %d %s", g_tItemCfgs[g_iItemCfgCount].name, &g_tItemCfgs[g_iItemCfgCount].bCanBeTouched, \
		                      g_tItemCfgs[g_iItemCfgCount].command);
		g_iItemCfgCount++;		
	}
	return 0;
}

int GetItemCfgCount(void)
{
	return g_iItemCfgCount;
}

PItemCfg GetItemCfgByIndex(int index)
{
	if (index < g_iItemCfgCount)
		return &g_tItemCfgs[index];
	else
		return NULL;
}

PItemCfg GetItemCfgByName(char *name)
{
	int i;
	for (i = 0; i < g_iItemCfgCount; i++)
	{
		if (strcmp(name, g_tItemCfgs[i].name) == 0)
			return &g_tItemCfgs[i];
	}
	return NULL;
}


